home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 2000
/
MacHack 2000.toast
/
pc
/
The Hacks
/
Softshoe
/
Lisa's Mac Parts
/
Views
/
Canvas
/
PortMap.cp
< prev
next >
Wrap
Text File
|
2000-06-23
|
3KB
|
116 lines
// PortMap.cp
#ifndef PortMap_h
#include "PortMap.h"
#endif
#ifndef Overflow_h
#include "Overflow.h"
#endif
#ifndef MinMax_h
#include "MinMax.h"
#endif
int16 PortMap::HorizontalToScreen( int32 x ) const
{
Assert( CanSubtract( x, offScreen.left ) );
Assert( x - offScreen.left <= maxint16 - int32(onScreen.left) );
Assert( x - offScreen.left >= minint16 - int32(onScreen.left) );
return x - offScreen.left + onScreen.left;
}
int16 PortMap::VerticalToScreen( int32 y ) const
{
Assert( CanSubtract( y, offScreen.top ) );
Assert( y - offScreen.top <= maxint16 - int32(onScreen.top) );
Assert( y - offScreen.top >= minint16 - int32(onScreen.top) );
return y - offScreen.top + onScreen.top;
}
int32 PortMap::HorizontalFromScreen( int16 x ) const
{
Assert( CanAdd( int32(x) - onScreen.left, offScreen.left ) );
return int32(x) - onScreen.left + offScreen.left;
}
int32 PortMap::VerticalFromScreen( int16 y ) const
{
Assert( CanAdd( int32(y) - onScreen.top, offScreen.top ) );
return int32(y) - onScreen.top + offScreen.top;
}
PointObject PortMap::ToScreen( Point32 p ) const
{
return PointObject( HorizontalToScreen( p.h ),
VerticalToScreen( p.v ) );
}
Point32 PortMap::FromScreen( PointObject p ) const
{
return Point32( HorizontalFromScreen( p.h ),
VerticalFromScreen( p.v ) );
}
Rectangle PortMap::ToScreen( Rectangle32 r ) const
{
return Rectangle( HorizontalToScreen( r.left ),
VerticalToScreen( r.top ),
HorizontalToScreen( r.right ),
VerticalToScreen( r.bottom ) );
}
Rectangle32 PortMap::FromScreen( Rectangle r ) const
{
return Rectangle32( HorizontalFromScreen( r.left ),
VerticalFromScreen( r.top ),
HorizontalFromScreen( r.right ),
VerticalFromScreen( r.bottom ) );
}
void PortMap::RestrictOnScreen( Rectangle restriction )
{
restriction &= onScreen;
offScreen = FromScreen( restriction );
onScreen = restriction;
}
void PortMap::RestrictOffScreen( Rectangle32 restriction )
{
restriction &= offScreen;
onScreen = ToScreen( restriction );
offScreen = restriction;
}
void PortMap::Submap( Rectangle32 area )
{
Rectangle32 intersection = area & offScreen;
onScreen = ToScreen( intersection );
offScreen = intersection - area.TopLeft();
}
void PortMap::SliceHorizontally( Range32 verticalRange )
{
Rectangle32 intersection( offScreen.left,
Max( offScreen.top, verticalRange.Start() ),
offScreen.right,
Min( offScreen.bottom, verticalRange.End() ) );
onScreen = ToScreen( intersection );
offScreen = intersection - Point32( 0, verticalRange.Start() );
}
void PortMap::SliceVertically( Range32 horizontalRange )
{
Rectangle32 intersection( Max( offScreen.left, horizontalRange.Start() ),
offScreen.top,
Min( offScreen.right, horizontalRange.End() ),
offScreen.bottom );
onScreen = ToScreen( intersection );
offScreen = intersection - Point32( horizontalRange.Start(), 0 );
}
void PortMap::Scroll( Point32 distance )
{
offScreen += distance;
}